#include <stdio.h>

//demo
//ip 10.67.83.11
//172184331
int main() {
	///* 待转化的整数IP */
	unsigned  int  IP1_Addr, IP2_Addr;
	IP1_Addr = 172184331;
	IP2_Addr = 172184331;
	// 法1：提取IP：位移操作
	int addr1_1 = IP1_Addr >> 24;        // 提取第一部分IP地址
	IP1_Addr = IP1_Addr << 8;
	int addr1_2 = IP1_Addr >> 24;        // 提取第二部分IP地址
	IP1_Addr  = IP1_Addr << 8;
	int addr1_3 = IP1_Addr >> 24;        // 提取第三部分IP地址
	IP1_Addr  = IP1_Addr  << 8;
	int addr1_4 = IP1_Addr  >> 24;       // 提取第四部分IP地址
	// 打印IP地址:结果为"10.67.83.11"
	printf("IP地址(位移操作)为:%d.%d.%d.%d\n", addr1_1, addr1_2, addr1_3, addr1_4);
	// 法2：提取IP：求余取整
	int addr2_4  = IP2_Addr % 256;       // 提取第一部分IP地址
	IP2_Addr  = IP2_Addr / 256;
	int addr2_3 = IP2_Addr % 256;        // 提取第一部分IP地址
	IP2_Addr  = IP2_Addr / 256;
	int addr2_2 = IP2_Addr % 256;        // 提取第一部分IP地址
	IP2_Addr = IP2_Addr / 256;
	int addr2_1  = IP2_Addr % 256;       // 提取第一部分IP地址
	// 打印IP地址:结果为"10.67.83.11"
	printf("IP地址(求余取整)为:%d.%d.%d.%d\n", addr2_1, addr2_2, addr2_3, addr2_4);
	///********************** 字符串IP转整数就比较简单了 ***************************/
	//待转换字符串IP
	//char * IP_Addr = "10.67.83.11";
	//提取4部分整数:提取方法很多这里省略
	int addr_1 = 10;
	int addr_2 = 67;
	int addr_3 = 83;
	int addr_4 = 11;
	unsigned long IP_Int =  (addr_1 * 256 * 256 * 256) + (addr_2 * 256 * 256) + (addr_3 * 256) + addr_4;
	printf("整数IP地址为:%ld\n", IP_Int);
}
